package com.linkai.pdd2021_autumn;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * @Description: 多多的加号
 * @Author: 林凯
 * @Date: 2021/10/11 19:08
 */
public class Main01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = Integer.valueOf(sc.nextLine());
        int h[] = new int[T];       // 高度
        int w[] = new int[T];       // 宽度
        // 用来保存所有图片的字符串的字符串数组
//        String str[][] = new String[T][];
        ArrayList<String[]> arrayList = new ArrayList();
        // i 表示当前是第几轮测试用例
        for (int i = 0; i < T; i++) {
            String input[] = sc.nextLine().split(" ");
            h[i] = Integer.valueOf(input[0]);
            w[i] = Integer.valueOf(input[1]);
            String str[] = new String[h[i]];
            for (int j = 0; j < h[i]; j++) {
                str[j] = sc.nextLine();
            }
            arrayList.add(str);
        }

        // 开始对图片进行遍历(通过加号各个顶点的左边来判断是否存在加号)
        // 定义一个用来记录加号各个顶点坐标的数组
        for (int i = 0; i < T; i++) {
            int x[] = new int[h[i] * w[i]];
            int y[] = new int[h[i] * w[i]];
            int index = -1;  //当前遍历到一个图中的第几个有效元素
            for (int j = 0; j < h[i]; j++) {    // 对每一行
                for (int k = 0; k < w[i]; k++) {    // 对每一列
                    if (arrayList.get(i)[j].charAt(k) == '*') {
                        index++;
                        // 记录第一个有效点的横纵坐标
                        x[index] = j;
                        y[index] = k;
                    }
                }
            }

            // 经过上面的 for 循环，已经记录了所有点的横纵坐标，然后根据横纵坐标的规律进行判断
            /*
                  从上到下，从左到右依次遍历。
                  前面几个点纵坐标相同，横坐标递增；
                  中间1个点开始，横坐标保持不变，纵坐标递增。
                  共有 index + 1 个有效点
            * */

            // 1.
            if (x[0] != x[index]) {
                System.out.println("NO");
                continue;
            }
            /*
                前提：
                    1. 第一个元素和最后一个元素横坐标一定相同
                判断：
                    第一个和最后一个纵坐标之差一定是偶数
            * */
            if ((x[index] - x[0]) % 2 != 0) {
                System.out.println("NO");
                continue;

            }
            /*
                总元素个数一定是奇数
            * */
            if ((index + 1) % 2 ==0) {
                System.out.println("NO");
                continue;
            }

            // 求中心点的坐标
            int center = (index) / 2;
            if (x[center] != y[center]) {
                System.out.println("NO");
                continue;
            }


            int addLength = x[index] - x[0] + 1;        // 加号长度
            int a1 = (x[index] - x[0]) / 2;     // 加号的“一横”对应的纵坐标
            for (int l = 0; l < addLength; l++) {

            }

            System.out.println("YES");
        }
    }
}
